Data storage systems are arrangements of hardware and software that include one or more storage processors coupled to arrays of non-volatile storage devices, such as magnetic disk drives, electronic flash drives, and/or optical drives, for example. The storage processors service storage requests, arriving from host machines (“hosts”), which specify files or other data elements to be written, read, created, or deleted, for example. Software running on the storage processors manages incoming storage requests and performs various data processing tasks to organize and secure the data elements stored on the non-volatile storage devices.
A common function of data storage systems is to copy data from a source to a destination. The purpose of such copying may be to create a clone of a data object or to migrate a data object. For example, data storage systems may migrate data objects, such as file systems, LUNs (Logical Unit Numbers, referring also to the units themselves) and VVols. Migration may be performed for numerous reasons, such as to provide a higher service level, e.g., by hosting data objects from faster disk drives. After migration, hosts can access the data object from the destination.
Unfortunately, the conventional approaches to copying data from a source to a destination encounter some problems. For example, at least some of these approaches maintain a list of in-progress host initiated I/O requests, and a host initiated I/O write request has to check to see if a copy I/O is in-progress to the same region. If there is a copy I/O in-progress, the host initiated I/O write request signals that the copy I/O should restart the transfer. The retransfer is important since the copy I/O can make no guarantees about the state of the source data (e.g., was the old or new data copied). Additionally, copy I/O's need to verify that no such I/O request is in-progress prior to starting the copy I/O by checking the list of in-progress host initiated I/O requests. However, maintaining a list of requests as described above does not scale well and hinders performance. This is undesirable.